import os
import jieba
from Tools import savefile, readfile

def corpus_segment(corpus_path, seg_path):
    catelist = os.listdir(corpus_path)  # 获取corpus_path下的所有子目录
    #print(catelist)
    '''
    其中子目录的名字就是类别名，例如：
    train_corpus/体育/21.txt中，'train_corpus/'是corpus_path，'体育'是catelist中的一个成员
    '''
    # 获取每个目录（类别）下所有的文件
    for mydir in catelist:
        class_path = corpus_path + mydir + "/"  # 拼出分类子目录的路径如：train_corpus/体育/
        seg_dir = seg_path + mydir +  "/" # 拼出分类分词目录的路径如：train_seg/体育/
        if not os.path.exists(seg_dir):  # 是否存在分词目录
            os.makedirs(seg_dir)        #如果没有则创建该目录

        file_list = os.listdir(class_path)  # 获取未分词语料库中某一类别中的所有文本
        for file_path in file_list:  # 遍历类别目录下的所有文件
            fullname = class_path + file_path  # 拼出文件名全路径如：train_corpus/art/21.txt
            content = readfile(fullname)  # 读取文件内容
            '''此时，content里面存贮的是原文本的所有字符，例如多余的空格、空行、回车等等，
            接下来，我们需要把这些无关痛痒的字符统统去掉，变成只有标点符号做间隔的紧凑的文本内容
            为了保证大量文本的读取速度，Tools封装的readfiles为rb方法，也就是二进制的读写，所以需要转成'utf-8'编码
            '''
            content = content.replace('\r\n'.encode('utf-8'), ''.encode('utf-8')).strip()  # 删除换行
            content = content.replace(' '.encode('utf-8'), ''.encode('utf-8')).strip()  # 删除空行、多余的空格
            content_seg =jieba.cut(content) # 为文件内容分词
            savefile(seg_dir + file_path, ' '.join(content_seg).encode('utf-8'))  # 将处理后的文件保存到分词后语料目录

if __name__ == "__main__":

    seg_path = "./train_corpus_seg/"#分词之后的语料库储存路径
    corpus_path = "./train_corpus/"#需要分词的语料库路径
    corpus_segment(corpus_path, seg_path)
    print("训练语料分词结束！！！")
    seg_path = "./test_corpus_seg/"  # 分词之后的语料库储存路径
    corpus_path = "./test_corpus/"  # 需要分词的语料库路径
    corpus_segment(corpus_path, seg_path)
    print("测试语料分词结束！！！")